<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>SemOpt: src/SCCSEQ.cpp Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">SemOpt
   &#160;<span id="projectnumber">0.2alpha5-SCC</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('SCCSEQ_8cpp.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">src/SCCSEQ.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="SCCSEQ_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00019"></a>00019 <span class="preprocessor">#include &quot;SCCSEQ.h&quot;</span>
<a name="l00020"></a>00020 
<a name="l00021"></a>00021 <span class="keyword">using namespace </span>std;
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 <span class="comment">//TODO documentazione</span>
<a name="l00024"></a>00024 <span class="keywordtype">void</span> SCCSEQ::performSCCSEQ(<a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* graph, vector&lt;SetArguments*&gt;* setSCC) {
<a name="l00025"></a>00025         
<a name="l00026"></a>00026         SCC(graph, setSCC);
<a name="l00027"></a>00027         
<a name="l00028"></a>00028 <span class="preprocessor">        #if DEBUG_SCCSEQ &gt; 0</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>                cout &lt;&lt; <span class="stringliteral">&quot;OUTPUT OF SCC:&quot;</span> &lt;&lt; endl;
<a name="l00030"></a>00030                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;setSCC-&gt;size(); i++)
<a name="l00031"></a>00031                         cout &lt;&lt; <span class="stringliteral">&quot;S&quot;</span>&lt;&lt;i&lt;&lt;<span class="stringliteral">&quot; = &quot;</span> &lt;&lt; *setSCC-&gt;at(i) &lt;&lt; endl;
<a name="l00032"></a>00032 <span class="preprocessor">        #endif</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span>
<a name="l00034"></a>00034         SEQ(setSCC);
<a name="l00035"></a>00035 }
<a name="l00036"></a>00036 
<a name="l00049"></a><a class="code" href="classSCCSEQ.html#a4773a37b2ec85f1c113f210242d63da9">00049</a> <span class="keywordtype">void</span> <a class="code" href="classSCCSEQ.html#a4773a37b2ec85f1c113f210242d63da9" title="Computes the SCC algorithm.">SCCSEQ::SCC</a>(<a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* graph, vector&lt;SetArguments*&gt;* setSCC){
<a name="l00050"></a>00050         <span class="keywordtype">int</span> index;
<a name="l00051"></a>00051 
<a name="l00052"></a>00052         unordered_map &lt;int,ExtendedArgument*&gt; nodesMap;
<a name="l00053"></a>00053         vector&lt;Argument*&gt; stack;
<a name="l00054"></a>00054 
<a name="l00055"></a>00055         <span class="comment">//inizializzazione dei dati di assistenza per tarjan</span>
<a name="l00056"></a>00056         <span class="keywordflow">for</span> (<a class="code" href="classSetArgumentsIterator.html" title="Class defining a const iterator for the elements of a set of arguments.">SetArgumentsIterator</a> it= graph-&gt;<a class="code" href="classSetArguments.html#aaee058feaed861edf27739fa04f374ef" title="Begin of the iterator for this set of arguments.">begin</a>(); it!= graph-&gt;<a class="code" href="classSetArguments.html#a551272d71c803f64efc155b04f41e775" title="End of the iterator for this set of arguments.">end</a>(); it++)
<a name="l00057"></a>00057                 nodesMap.insert(make_pair((*it)-&gt;getNumber(),<span class="keyword">new</span> <a class="code" href="classExtendedArgument.html" title="Represents a class containing the information used in the Tarjan Algorithm.">ExtendedArgument</a>()));
<a name="l00058"></a>00058 
<a name="l00059"></a>00059         index = 0;
<a name="l00060"></a>00060         stack = vector&lt;Argument*&gt;();
<a name="l00061"></a>00061 
<a name="l00062"></a>00062         <span class="keywordflow">for</span> (<a class="code" href="classSetArgumentsIterator.html" title="Class defining a const iterator for the elements of a set of arguments.">SetArgumentsIterator</a> it = graph-&gt;<a class="code" href="classSetArguments.html#aaee058feaed861edf27739fa04f374ef" title="Begin of the iterator for this set of arguments.">begin</a>(); it != graph-&gt;<a class="code" href="classSetArguments.html#a551272d71c803f64efc155b04f41e775" title="End of the iterator for this set of arguments.">end</a>(); it++)
<a name="l00063"></a>00063                 <span class="keywordflow">if</span> (nodesMap[(*it)-&gt;getNumber()]-&gt;index == <a class="code" href="classExtendedArgument.html#ae549fc7b544a8317cbbd7f995e0dfbd2" title="represents the default index value field. Value that is associated to index field when the node has n...">ExtendedArgument::INDEXDEFAULT</a>)
<a name="l00064"></a>00064                         strongConnected(*it,graph, &amp;index, &amp;stack, setSCC, &amp;nodesMap);
<a name="l00065"></a>00065 
<a name="l00066"></a>00066         <span class="keywordflow">for</span> (<span class="keyword">auto</span> it=nodesMap.begin();it!=nodesMap.end();it++){
<a name="l00067"></a>00067                 <span class="keyword">delete</span> (*it).second;
<a name="l00068"></a>00068         }
<a name="l00069"></a>00069         nodesMap.clear();
<a name="l00070"></a>00070 }
<a name="l00071"></a>00071 
<a name="l00072"></a>00072 <span class="comment">//TODO documentazione</span>
<a name="l00073"></a><a class="code" href="classSCCSEQ.html#aa05867c1604ac1584079f4bf643b1d36">00073</a> <span class="keywordtype">void</span> <a class="code" href="classSCCSEQ.html#aa05867c1604ac1584079f4bf643b1d36">SCCSEQ::SEQ</a>(vector&lt;SetArguments*&gt;* setSCC){
<a name="l00074"></a>00074         <span class="comment">/* definiamo macrografo il grafo dove ogni scc è sintetizzato in un nodo,</span>
<a name="l00075"></a>00075 <span class="comment">                e i macroarchi sussistono ove sussistevano archi.</span>
<a name="l00076"></a>00076 <span class="comment">           IMPORTANTE non serve memorizzare un collegamento tra nodi e macronodi:</span>
<a name="l00077"></a>00077 <span class="comment">                l&#39;iesimo sccset è l&#39;iesimo macronodo e descrive già i propri nodi */</span>
<a name="l00078"></a>00078         <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a> macroGraph = <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>();
<a name="l00079"></a>00079         <a class="code" href="classAF.html" title="Class encompassing an Argumentation Framework.">AF</a> macroAF = <a class="code" href="classAF.html" title="Class encompassing an Argumentation Framework.">AF</a>();
<a name="l00080"></a>00080 
<a name="l00081"></a>00081         <span class="comment">/* Un SCC è da un punto di vista del macrografo visibile come un Argument;</span>
<a name="l00082"></a>00082 <span class="comment">         * da un punto di vista del grafo, come un SetArguments. */</span>
<a name="l00083"></a>00083 
<a name="l00084"></a>00084         <span class="comment">//generate, for each scc, the corrispective node in the macroGraph</span>
<a name="l00085"></a>00085         <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;setSCC-&gt;size(); i++)
<a name="l00086"></a>00086                 macroGraph.<a class="code" href="classSetArguments.html#a989d8986ecf49baa0dc982766c0a5df4" title="Add an argument to the set.">add_Argument</a>(<span class="keyword">new</span> <a class="code" href="classArgument.html" title="Class representing an Argument.">Argument</a>(genName(i), i, &amp;macroAF));
<a name="l00087"></a>00087 
<a name="l00088"></a>00088         <a class="code" href="classSCCSEQ.html#a8a3c4f47ec233566eb2a32146077b937" title="create the connections between SCCs creating a macroGraph">SCCSEQ::linkMacroGraph</a>(setSCC, &amp;macroGraph);
<a name="l00089"></a>00089 <span class="preprocessor">        #if DEBUG_SCCSEQ &gt; 1</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span>                cout &lt;&lt; <span class="stringliteral">&quot;macrograph is now: &quot;</span> &lt;&lt; endl;
<a name="l00091"></a>00091                 macroGraph.<a class="code" href="classSetArguments.html#a97ce4b4815433f7c573a5922eaec190d" title="per ogni nodo del grafo, stampa l&#39;insieme dei suoi nodi attaccanti e di quelli attaccati.">printNodeRelations</a>();
<a name="l00092"></a>00092 <span class="preprocessor">        #endif</span>
<a name="l00093"></a>00093 <span class="preprocessor"></span>
<a name="l00094"></a>00094         vector&lt;int&gt; positions_toposorted = vector&lt;int&gt;();
<a name="l00095"></a>00095         <a class="code" href="classSCCSEQ.html#a3e78f04209344bbe31b47c277076dc64">SCCSEQ::toposort</a>(macroGraph, &amp;positions_toposorted);
<a name="l00096"></a>00096 <span class="preprocessor">        #if DEBUG_SCCSEQ &gt; 1</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span>                cout &lt;&lt; <span class="stringliteral">&quot;position toposorted: &quot;</span>;
<a name="l00098"></a>00098                 <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;positions_toposorted.size(); i++)
<a name="l00099"></a>00099                         cout &lt;&lt; positions_toposorted[i] &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;
<a name="l00100"></a>00100                 cout &lt;&lt;endl;
<a name="l00101"></a>00101 <span class="preprocessor">        #endif</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>
<a name="l00103"></a>00103         <a class="code" href="classSCCSEQ.html#a9ac95622db921cd44e93a34232ffdf79" title="rimappa gli SCC secondo le posizioni toposortate.">SCCSEQ::finalsorting</a>(setSCC, positions_toposorted);
<a name="l00104"></a>00104 
<a name="l00105"></a>00105 <span class="preprocessor">        #if DEBUG_SCCSEQ &gt; 0</span>
<a name="l00106"></a>00106 <span class="preprocessor"></span>                cout &lt;&lt; <span class="stringliteral">&quot;OUTPUT OF SCCSEQ: &quot;</span> &lt;&lt; endl;
<a name="l00107"></a>00107                 <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;setSCC-&gt;size(); i++)
<a name="l00108"></a>00108                         cout &lt;&lt; <span class="stringliteral">&quot;S&quot;</span>&lt;&lt;i&lt;&lt;<span class="stringliteral">&quot; = &quot;</span> &lt;&lt; *setSCC-&gt;at(i) &lt;&lt; endl;
<a name="l00109"></a>00109                 cout &lt;&lt;endl;
<a name="l00110"></a>00110 <span class="preprocessor">        #endif</span>
<a name="l00111"></a>00111 <span class="preprocessor"></span>
<a name="l00112"></a>00112         <span class="comment">//we need to free all the Arguments inside macroGraph because they are not longer needed</span>
<a name="l00113"></a>00113         <span class="keywordflow">for</span> (<span class="keyword">auto</span> it=macroGraph.<a class="code" href="classSetArguments.html#aaee058feaed861edf27739fa04f374ef" title="Begin of the iterator for this set of arguments.">begin</a>();it!=macroGraph.<a class="code" href="classSetArguments.html#a551272d71c803f64efc155b04f41e775" title="End of the iterator for this set of arguments.">end</a>();it++){
<a name="l00114"></a>00114                 <span class="keyword">delete</span> (*it);
<a name="l00115"></a>00115         }
<a name="l00116"></a>00116 
<a name="l00117"></a>00117 }
<a name="l00118"></a>00118 
<a name="l00119"></a>00119 <span class="comment">//TODO documentazione</span>
<a name="l00120"></a><a class="code" href="classSCCSEQ.html#a9ac95622db921cd44e93a34232ffdf79">00120</a> <span class="keywordtype">void</span> <a class="code" href="classSCCSEQ.html#a9ac95622db921cd44e93a34232ffdf79" title="rimappa gli SCC secondo le posizioni toposortate.">SCCSEQ::finalsorting</a>(vector&lt;SetArguments*&gt;* setSCC, vector&lt;int&gt; pos) {
<a name="l00121"></a>00121         vector&lt;SetArguments*&gt;* tempSCC = <span class="keyword">new</span> vector&lt;SetArguments*&gt;(); <span class="comment">// cloning</span>
<a name="l00122"></a>00122         <span class="keywordflow">if</span>(setSCC-&gt;size() != pos.size()) {
<a name="l00123"></a>00123                 cout &lt;&lt; <span class="stringliteral">&quot; Errore in SCCSEQ. Exiting &quot;</span> &lt;&lt;endl;
<a name="l00124"></a>00124                 exit(1);
<a name="l00125"></a>00125         }
<a name="l00126"></a>00126         <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;pos.size(); i++)
<a name="l00127"></a>00127                 tempSCC-&gt;push_back(setSCC-&gt;at(i));
<a name="l00128"></a>00128         <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;pos.size(); i++)
<a name="l00129"></a>00129                 setSCC-&gt;at(i) = tempSCC-&gt;at(pos.at(i));
<a name="l00130"></a>00130         <span class="keyword">delete</span> tempSCC; <span class="comment">//TODO testing</span>
<a name="l00131"></a>00131 }
<a name="l00132"></a>00132 
<a name="l00216"></a><a class="code" href="classSCCSEQ.html#a8a3c4f47ec233566eb2a32146077b937">00216</a> <span class="keywordtype">void</span> <a class="code" href="classSCCSEQ.html#a8a3c4f47ec233566eb2a32146077b937" title="create the connections between SCCs creating a macroGraph">SCCSEQ::linkMacroGraph</a>(vector&lt;SetArguments*&gt;* setSCC, <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* macroGraph) {
<a name="l00217"></a>00217         <span class="comment">/* occorre creare gli archi giusti nel macrografo, per ora composto di macronodi isolati.</span>
<a name="l00218"></a>00218 <span class="comment">         * Siccome un SCC è un insieme minimale (slide 9), pat sostiene che,</span>
<a name="l00219"></a>00219 <span class="comment">         * se esiste un attacco da n incluso in Si a m incluso in Sj, allora</span>
<a name="l00220"></a>00220 <span class="comment">         *      Si attacca Sj</span>
<a name="l00221"></a>00221 <span class="comment">         *      Sj non attacca sicuramente Si, altrimenti essi costituirebbero un SCC unico</span>
<a name="l00222"></a>00222 <span class="comment">         */</span>
<a name="l00223"></a>00223         <span class="keyword">auto</span> it_i = setSCC-&gt;begin(), it_end = setSCC-&gt;end();
<a name="l00224"></a>00224         <span class="keywordtype">int</span> ind_i = 0, ind_j = 0;
<a name="l00225"></a>00225         <span class="keywordflow">while</span>(it_i!=it_end-1){
<a name="l00226"></a>00226                 <span class="keywordtype">bool</span> i_attacks_j = <span class="keyword">false</span>;
<a name="l00227"></a>00227                 <span class="keyword">auto</span> it_j = it_i+1;
<a name="l00228"></a>00228                 ind_j = ind_i+1;
<a name="l00229"></a>00229                 <span class="keywordflow">while</span>(it_j!=it_end &amp;&amp; !i_attacks_j){
<a name="l00230"></a>00230                                 <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* tempIJ = (*it_i)-&gt;<a class="code" href="classSetArguments.html#a8f48fd9f7b627db762d4fc2621160853" title="Get the arguments in the caller set which are attacked by at least one node in attackers.">getSubsetAttackedBy</a>(*it_j);
<a name="l00231"></a>00231                                 <span class="comment">//se non c&#39;è alcun nodo in &quot;j&quot; che attacca i nodi in &quot;i&quot; allora i due macro argomenti non hanno un arco che li collega.</span>
<a name="l00232"></a>00232                                 <span class="keywordflow">if</span>(!tempIJ-&gt;<a class="code" href="classSetArguments.html#a91e548daa6d0859946c8604b1ebb8c5a" title="Check wether or not this set is empty.">empty</a>()) {
<a name="l00233"></a>00233                                         macroGraph-&gt;<a class="code" href="classSetArguments.html#a119cb47c6e77b8faf10135d90c5b68b9" title="This method returns the pointer to the Argument whose identification number is given as parameter...">getArgumentByNumber</a>(ind_i)-&gt;<a class="code" href="classArgument.html#ad295236fa6d55121e37e90ec05289c8c" title="Method for adding an attacker.">add_attackers</a>(macroGraph-&gt;<a class="code" href="classSetArguments.html#a119cb47c6e77b8faf10135d90c5b68b9" title="This method returns the pointer to the Argument whose identification number is given as parameter...">getArgumentByNumber</a>(ind_j));
<a name="l00234"></a>00234                                         macroGraph-&gt;<a class="code" href="classSetArguments.html#a119cb47c6e77b8faf10135d90c5b68b9" title="This method returns the pointer to the Argument whose identification number is given as parameter...">getArgumentByNumber</a>(ind_j)-&gt;<a class="code" href="classArgument.html#a8a5cddf583929099b8228ed9300e2759" title="Method for adding an attacks originated from this argument.">add_attacks</a>(macroGraph-&gt;<a class="code" href="classSetArguments.html#a119cb47c6e77b8faf10135d90c5b68b9" title="This method returns the pointer to the Argument whose identification number is given as parameter...">getArgumentByNumber</a>(ind_i));
<a name="l00235"></a>00235                                         i_attacks_j = <span class="keyword">true</span>;
<a name="l00236"></a>00236                                 }
<a name="l00237"></a>00237                                 <span class="keyword">delete</span> tempIJ; <span class="comment">// TODO testing</span>
<a name="l00238"></a>00238                         it_j++;
<a name="l00239"></a>00239                         ind_j++;
<a name="l00240"></a>00240                 }
<a name="l00241"></a>00241                 it_i++;
<a name="l00242"></a>00242                 ind_i++;
<a name="l00243"></a>00243         }
<a name="l00244"></a>00244 }
<a name="l00245"></a>00245 
<a name="l00254"></a><a class="code" href="classSCCSEQ.html#a6efd1e52faf8a810b51a1d6ba74ecfae">00254</a> std::string <a class="code" href="classSCCSEQ.html#a6efd1e52faf8a810b51a1d6ba74ecfae">SCCSEQ::genName</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i) {
<a name="l00255"></a>00255         <span class="keywordtype">string</span> name = <span class="stringliteral">&quot;S&quot;</span>;
<a name="l00256"></a>00256         ostringstream convert;
<a name="l00257"></a>00257         convert &lt;&lt; i;
<a name="l00258"></a>00258         name.append(convert.str());
<a name="l00259"></a>00259         <span class="keywordflow">return</span> name;
<a name="l00260"></a>00260 }
<a name="l00261"></a>00261 
<a name="l00262"></a>00262 <span class="comment">//TODO migliorare la documentazione</span>
<a name="l00271"></a>00271 <span class="comment"></span><span class="comment">// passo (macro)grafo PER VALORE: ci opererò sopra infatti. Inutile: copi la struttura, non le strutture referenziate e quindi il danno lo fai comunque.</span>
<a name="l00272"></a>00272 <span class="comment">//Fortunatamente le informazioni che vengono perse non sono più utilizzate nell&#39;algoritmo e quindi perderle non è rilevante ;D</span>
<a name="l00273"></a><a class="code" href="classSCCSEQ.html#a3e78f04209344bbe31b47c277076dc64">00273</a> <span class="keywordtype">void</span> <a class="code" href="classSCCSEQ.html#a3e78f04209344bbe31b47c277076dc64">SCCSEQ::toposort</a>(<a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a> macroGraph, vector&lt;int&gt;* L) {
<a name="l00274"></a>00274 
<a name="l00275"></a>00275         <span class="comment">//stack representing the starting macroNodes which have NO attackers</span>
<a name="l00276"></a>00276         stack&lt;Argument*&gt; S = stack&lt;Argument*&gt;();
<a name="l00277"></a>00277 
<a name="l00278"></a>00278         <span class="keywordflow">for</span>(<a class="code" href="classSetArgumentsIterator.html" title="Class defining a const iterator for the elements of a set of arguments.">SetArgumentsIterator</a> it = macroGraph.<a class="code" href="classSetArguments.html#aaee058feaed861edf27739fa04f374ef" title="Begin of the iterator for this set of arguments.">begin</a>(); it != macroGraph.<a class="code" href="classSetArguments.html#a551272d71c803f64efc155b04f41e775" title="End of the iterator for this set of arguments.">end</a>(); it++)
<a name="l00279"></a>00279                 <span class="comment">//we can use Argument-&gt;get_attackers() because the graph where (*it) comes from is the macroGraph, not a subset of a larger graph</span>
<a name="l00280"></a>00280                 <span class="keywordflow">if</span>( (*it)-&gt;get_attackers()-&gt;empty() ) {
<a name="l00281"></a>00281                         S.push(*it);
<a name="l00282"></a>00282 <span class="preprocessor">                        #ifdef DEBUG_SCCSEQ</span>
<a name="l00283"></a>00283 <span class="preprocessor"></span>                                cout &lt;&lt; <span class="stringliteral">&quot;added &quot;</span>&lt;&lt; S.top()-&gt;print() &lt;&lt; <span class="stringliteral">&quot; to S.&quot;</span>&lt;&lt;endl;
<a name="l00284"></a>00284 <span class="preprocessor">                        #endif</span>
<a name="l00285"></a>00285 <span class="preprocessor"></span>                }
<a name="l00286"></a>00286 
<a name="l00287"></a>00287         <span class="keywordflow">while</span>(!S.empty()) {
<a name="l00288"></a>00288                 <a class="code" href="classArgument.html" title="Class representing an Argument.">Argument</a>* n = S.top();
<a name="l00289"></a>00289                 S.pop();
<a name="l00290"></a>00290 <span class="preprocessor">                #ifdef DEBUG_SCCSEQ</span>
<a name="l00291"></a>00291 <span class="preprocessor"></span>                        <span class="keywordflow">if</span>(!S.empty())
<a name="l00292"></a>00292                                 cout &lt;&lt; endl &lt;&lt;<span class="stringliteral">&quot;WHILE EXT. popped n = &quot;</span>&lt;&lt; n-&gt;print() &lt;&lt;<span class="stringliteral">&quot;from S. S.top = &quot;</span> &lt;&lt; S.top()-&gt;print()&lt;&lt; endl;
<a name="l00293"></a>00293                         <span class="keywordflow">else</span>
<a name="l00294"></a>00294                                 cout &lt;&lt; endl &lt;&lt;<span class="stringliteral">&quot;WHILE EXT. popped n = &quot;</span>&lt;&lt; n-&gt;print() &lt;&lt;<span class="stringliteral">&quot;from S. S is empty.&quot;</span>&lt;&lt; endl;
<a name="l00295"></a>00295 <span class="preprocessor">                #endif</span>
<a name="l00296"></a>00296 <span class="preprocessor"></span>                L-&gt;push_back(n-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>());
<a name="l00297"></a>00297 <span class="preprocessor">                #ifdef DEBUG_SCCSEQ</span>
<a name="l00298"></a>00298 <span class="preprocessor"></span>                        cout &lt;&lt;<span class="stringliteral">&quot; L = [&quot;</span>;
<a name="l00299"></a>00299                         <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;L-&gt;size(); i++)
<a name="l00300"></a>00300                                 cout &lt;&lt; L-&gt;at(i) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;
<a name="l00301"></a>00301                         cout &lt;&lt;<span class="stringliteral">&quot; ]&quot;</span>&lt;&lt; endl;
<a name="l00302"></a>00302 <span class="preprocessor">                #endif</span>
<a name="l00303"></a>00303 <span class="preprocessor"></span>
<a name="l00304"></a>00304                 <span class="comment">//we can use Argument-&gt;get_attacks() because the graph where n comes from is the macroGraph, not a subset of a larger graph</span>
<a name="l00305"></a>00305                 <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* attackedByN = n-&gt;<a class="code" href="classArgument.html#ae8c77c2d0676845f250d77dfb3ce4378" title="Method returning the set of attackers.">get_attacks</a>();
<a name="l00306"></a>00306                 <span class="comment">//IMPORTANT: we don&#39;t care wether or not the data about the attackers/attacks is lost after removing permanently an attacks/attackers:</span>
<a name="l00307"></a>00307                 <span class="comment">//this because that data is not useful anymore (according to Kahn algorithm, that information is no longer used after the consumption).</span>
<a name="l00308"></a>00308 
<a name="l00309"></a>00309                 <span class="comment">//TODO test the removal</span>
<a name="l00310"></a>00310 <span class="comment">//              SetArguments* copyOfAttackedByN = new SetArguments();</span>
<a name="l00311"></a>00311 <span class="comment">//              attackedByN-&gt;clone(copyOfAttackedByN);</span>
<a name="l00312"></a>00312 
<a name="l00313"></a>00313 <span class="preprocessor">                #ifdef DEBUG_SCCSEQ</span>
<a name="l00314"></a>00314 <span class="preprocessor"></span>                        cout &lt;&lt; <span class="stringliteral">&quot; creato attackedBy &quot;</span> &lt;&lt; n-&gt;print() &lt;&lt; endl;
<a name="l00315"></a>00315                         attackedByN-&gt;<a class="code" href="classSetArguments.html#a97ce4b4815433f7c573a5922eaec190d" title="per ogni nodo del grafo, stampa l&#39;insieme dei suoi nodi attaccanti e di quelli attaccati.">printNodeRelations</a>();
<a name="l00316"></a>00316 <span class="preprocessor">                #endif</span>
<a name="l00317"></a>00317 <span class="preprocessor"></span>
<a name="l00318"></a>00318                 <a class="code" href="classSetArgumentsIterator.html" title="Class defining a const iterator for the elements of a set of arguments.">SetArgumentsIterator</a> it = attackedByN-&gt;<a class="code" href="classSetArguments.html#aaee058feaed861edf27739fa04f374ef" title="Begin of the iterator for this set of arguments.">begin</a>();
<a name="l00319"></a>00319                 <a class="code" href="classArgument.html" title="Class representing an Argument.">Argument</a>* m = (*it);
<a name="l00320"></a>00320                 <span class="keywordflow">while</span>(<span class="comment">/*(it != 0) &amp;&amp;*/</span> it != attackedByN-&gt;<a class="code" href="classSetArguments.html#a551272d71c803f64efc155b04f41e775" title="End of the iterator for this set of arguments.">end</a>()) {
<a name="l00321"></a>00321                         m = (*it);
<a name="l00322"></a>00322 <span class="preprocessor">                        #ifdef DEBUG_SCCSEQ</span>
<a name="l00323"></a>00323 <span class="preprocessor"></span>                                cout &lt;&lt;<span class="stringliteral">&quot; inizio while sui M, m &quot;</span> &lt;&lt; m-&gt;print() &lt;&lt; endl;
<a name="l00324"></a>00324                                 cout &lt;&lt;<span class="stringliteral">&quot; inizio while sui M, attackedByN &quot;</span> &lt;&lt; endl;
<a name="l00325"></a>00325                                 attackedByN-&gt;<a class="code" href="classSetArguments.html#a97ce4b4815433f7c573a5922eaec190d" title="per ogni nodo del grafo, stampa l&#39;insieme dei suoi nodi attaccanti e di quelli attaccati.">printNodeRelations</a>();
<a name="l00326"></a>00326                                 cout &lt;&lt;<span class="stringliteral">&quot; inizio while sui M, copyOfAttackedByN &quot;</span> &lt;&lt; endl;
<a name="l00327"></a>00327                                 copyOfAttackedByN-&gt;printNodeRelations();
<a name="l00328"></a>00328                                 cout &lt;&lt;<span class="stringliteral">&quot; inizio while sui M, G &quot;</span> &lt;&lt; endl;
<a name="l00329"></a>00329                                 G.printNodeRelations();
<a name="l00330"></a>00330                                 cout &lt;&lt; <span class="stringliteral">&quot;rimuovo (n,m) = &quot;</span>&lt;&lt; n-&gt;print() &lt;&lt;<span class="stringliteral">&quot;,&quot;</span>&lt;&lt;m-&gt;print() &lt;&lt;<span class="stringliteral">&quot; da G(?)&quot;</span>&lt;&lt;endl;
<a name="l00331"></a>00331 <span class="preprocessor">                        #endif</span>
<a name="l00332"></a>00332 <span class="preprocessor"></span>                        n-&gt;<a class="code" href="classArgument.html#aaee498e60e009e6fdb455decb25fa96d" title="Method for removing an attacks originated from this argument.">remove_attacks</a>(m);
<a name="l00333"></a>00333                         m-&gt;<a class="code" href="classArgument.html#afbd830039143306df9ea249a8e3e8882" title="Method for removing an attacker.">remove_attackers</a>(n);
<a name="l00334"></a>00334                         <span class="comment">//we can use Argument-&gt;get_attacks() because the graph where n comes from is the macroGraph, not a subset of a larger graph</span>
<a name="l00335"></a>00335                         attackedByN = n-&gt;<a class="code" href="classArgument.html#ae8c77c2d0676845f250d77dfb3ce4378" title="Method returning the set of attackers.">get_attacks</a>();
<a name="l00336"></a>00336 <span class="preprocessor">                        #ifdef DEBUG_SCCSEQ</span>
<a name="l00337"></a>00337 <span class="preprocessor"></span>                                cout &lt;&lt;<span class="stringliteral">&quot; meta while sui M, attackedByN &quot;</span> &lt;&lt; endl;
<a name="l00338"></a>00338                                 attackedByN-&gt;<a class="code" href="classSetArguments.html#a97ce4b4815433f7c573a5922eaec190d" title="per ogni nodo del grafo, stampa l&#39;insieme dei suoi nodi attaccanti e di quelli attaccati.">printNodeRelations</a>();
<a name="l00339"></a>00339                                 cout &lt;&lt;<span class="stringliteral">&quot; inizio while sui M, copyOfAttackedByN &quot;</span> &lt;&lt; endl;
<a name="l00340"></a>00340                                 copyOfAttackedByN-&gt;printNodeRelations();
<a name="l00341"></a>00341                                 cout &lt;&lt;<span class="stringliteral">&quot; meta while sui M, G &quot;</span> &lt;&lt; endl;
<a name="l00342"></a>00342                                 G.printNodeRelations();
<a name="l00343"></a>00343 <span class="preprocessor">                        #endif</span>
<a name="l00344"></a>00344 <span class="preprocessor"></span>
<a name="l00345"></a>00345                         <span class="comment">//we can use Argument-&gt;get_attackers() because the graph where (*it) comes from is the macroGraph, not a subset of a larger graph</span>
<a name="l00346"></a>00346                         <span class="keywordflow">if</span>(m-&gt;<a class="code" href="classArgument.html#aa57914a9e5a27af3c3dbd1db8c0d3602" title="Method returning the set of attacked arguments.">get_attackers</a>()-&gt;<a class="code" href="classSetArguments.html#a91e548daa6d0859946c8604b1ebb8c5a" title="Check wether or not this set is empty.">empty</a>()) {
<a name="l00347"></a>00347                                 S.push(m);
<a name="l00348"></a>00348 <span class="preprocessor">                                #ifdef DEBUG_SCCSEQ</span>
<a name="l00349"></a>00349 <span class="preprocessor"></span>                                        cout &lt;&lt; <span class="stringliteral">&quot;aggiungo m= &quot;</span>&lt;&lt; m-&gt;print() &lt;&lt;<span class="stringliteral">&quot; (no more attackers) in S.&quot;</span> &lt;&lt; endl;
<a name="l00350"></a>00350                                         cout &lt;&lt; <span class="stringliteral">&quot;dopo aggiunta,  S.top = &quot;</span> &lt;&lt; S.top()-&gt;print() &lt;&lt; endl;
<a name="l00351"></a>00351 <span class="preprocessor">                                #endif</span>
<a name="l00352"></a>00352 <span class="preprocessor"></span>                        }
<a name="l00353"></a>00353 
<a name="l00354"></a>00354 <span class="preprocessor">                        #ifdef DEBUG_SCCSEQ</span>
<a name="l00355"></a>00355 <span class="preprocessor"></span>                                cout &lt;&lt;<span class="stringliteral">&quot;termine while sui M, S.top =&quot;</span>&lt;&lt; S.top()-&gt;print() &lt;&lt; <span class="stringliteral">&quot;, attackedByN&quot;</span>&lt;&lt;endl;
<a name="l00356"></a>00356                                 attackedByN-&gt;<a class="code" href="classSetArguments.html#a97ce4b4815433f7c573a5922eaec190d" title="per ogni nodo del grafo, stampa l&#39;insieme dei suoi nodi attaccanti e di quelli attaccati.">printNodeRelations</a>();
<a name="l00357"></a>00357                                 cout &lt;&lt;<span class="stringliteral">&quot; inizio while sui M, copyOfAttackedByN &quot;</span> &lt;&lt; endl;
<a name="l00358"></a>00358                                 copyOfAttackedByN-&gt;printNodeRelations();
<a name="l00359"></a>00359                                 cout &lt;&lt;<span class="stringliteral">&quot;termine while sui M, G &quot;</span> &lt;&lt; endl;
<a name="l00360"></a>00360                                 G.printNodeRelations();
<a name="l00361"></a>00361 <span class="preprocessor">                        #endif</span>
<a name="l00362"></a>00362 <span class="preprocessor"></span>                        it++;
<a name="l00363"></a>00363                 }
<a name="l00364"></a>00364 <span class="preprocessor">                #ifdef DEBUG_SCCSEQ</span>
<a name="l00365"></a>00365 <span class="preprocessor"></span>                        <span class="keywordflow">if</span>(!S.empty())
<a name="l00366"></a>00366                                 cout &lt;&lt;<span class="stringliteral">&quot;termine iterazione WHILE EXT, S.top =&quot;</span>&lt;&lt; S.top()-&gt;print() &lt;&lt;endl;
<a name="l00367"></a>00367                         <span class="keywordflow">else</span>
<a name="l00368"></a>00368                                 cout &lt;&lt;<span class="stringliteral">&quot;termine iterazione WHILE EXT, S is empty&quot;</span>&lt;&lt;endl;
<a name="l00369"></a>00369 <span class="preprocessor">                #endif</span>
<a name="l00370"></a>00370 <span class="preprocessor"></span>        }
<a name="l00371"></a>00371 <span class="preprocessor">        #ifdef DEBUG_SCCSEQ</span>
<a name="l00372"></a>00372 <span class="preprocessor"></span>                cout &lt;&lt; <span class="stringliteral">&quot;final macroGraph&quot;</span> &lt;&lt; endl;
<a name="l00373"></a>00373                 G.printNodeRelations();
<a name="l00374"></a>00374                 cout &lt;&lt; <span class="stringliteral">&quot;final list::: &quot;</span> &lt;&lt;  endl;
<a name="l00375"></a>00375                 <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;L-&gt;size(); i++)
<a name="l00376"></a>00376                         cout &lt;&lt; L-&gt;at(i) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;
<a name="l00377"></a>00377 <span class="preprocessor">        #endif</span>
<a name="l00378"></a>00378 <span class="preprocessor"></span>        <span class="keywordflow">if</span>(macroGraph.<a class="code" href="classSetArguments.html#a26bbc586d96178dfc64ee0cdb7601564" title="restituisce TRUE sse nel grafo esiste almeno un arco orientato">graphHasEdges</a>()) {
<a name="l00379"></a>00379                 cout &lt;&lt; <span class="stringliteral">&quot;Dopo toposort, il macrografo ha ancor edges. Probabilmente non è stato fornito un DAG. Errore, termino!&quot;</span> &lt;&lt; endl;
<a name="l00380"></a>00380                 exit(1);
<a name="l00381"></a>00381         }
<a name="l00382"></a>00382 }
<a name="l00383"></a>00383 
<a name="l00395"></a><a class="code" href="classSCCSEQ.html#a4f71a88e8d1049f2c27c23303170b4b2">00395</a> <span class="keywordtype">void</span> <a class="code" href="classSCCSEQ.html#a4f71a88e8d1049f2c27c23303170b4b2" title="function needed by SCC">SCCSEQ::strongConnected</a>(<a class="code" href="classArgument.html" title="Class representing an Argument.">Argument</a>* v, <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* graph,<span class="keywordtype">int</span>* globalIndex, vector&lt;Argument*&gt;* stack, vector&lt;SetArguments*&gt;* sccresult,
<a name="l00396"></a>00396                 unordered_map &lt;int,ExtendedArgument*&gt;* nodeMap){
<a name="l00397"></a>00397         (*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;index=*globalIndex;
<a name="l00398"></a>00398         (*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;lowlink=*globalIndex;
<a name="l00399"></a>00399         *globalIndex=*globalIndex+1;
<a name="l00400"></a>00400         stack-&gt;push_back(v);
<a name="l00401"></a>00401 
<a name="l00402"></a>00402 
<a name="l00403"></a>00403         <span class="keywordflow">for</span> (<a class="code" href="classSetArgumentsIterator.html" title="Class defining a const iterator for the elements of a set of arguments.">SetArgumentsIterator</a> w = graph-&gt;<a class="code" href="classSetArguments.html#a288d7f85ace570bba59f76d096d8131f">getArgumentAttacksInSet</a>(v)-&gt;<a class="code" href="classSetArguments.html#aaee058feaed861edf27739fa04f374ef" title="Begin of the iterator for this set of arguments.">begin</a>(); w != graph-&gt;<a class="code" href="classSetArguments.html#a288d7f85ace570bba59f76d096d8131f">getArgumentAttacksInSet</a>(v)-&gt;<a class="code" href="classSetArguments.html#a551272d71c803f64efc155b04f41e775" title="End of the iterator for this set of arguments.">end</a>(); w++){
<a name="l00404"></a>00404                 <span class="keywordflow">if</span> ((*nodeMap)[(*w)-&gt;getNumber()]-&gt;index == <a class="code" href="classExtendedArgument.html#ae549fc7b544a8317cbbd7f995e0dfbd2" title="represents the default index value field. Value that is associated to index field when the node has n...">ExtendedArgument::INDEXDEFAULT</a>) {
<a name="l00405"></a>00405                         strongConnected(*w, graph, globalIndex, stack, sccresult, nodeMap);
<a name="l00406"></a>00406                         (*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;lowlink = min((*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;lowlink, (*nodeMap)[(*w)-&gt;getNumber()]-&gt;lowlink);
<a name="l00407"></a>00407                 }
<a name="l00408"></a>00408                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (find(stack-&gt;begin(),stack-&gt;end(),*w) != stack-&gt;end())
<a name="l00409"></a>00409                         (*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;lowlink = min((*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;lowlink, (*nodeMap)[(*w)-&gt;getNumber()]-&gt;index);
<a name="l00410"></a>00410         }
<a name="l00411"></a>00411 
<a name="l00412"></a>00412         <span class="keywordflow">if</span> ((*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;lowlink == (*nodeMap)[v-&gt;<a class="code" href="classArgument.html#aa26daf8c55afbe7d0970b23fbdbc96ca" title="Method returning the unique integer identifier of this argument.">getNumber</a>()]-&gt;index) {
<a name="l00413"></a>00413                 <a class="code" href="classArgument.html" title="Class representing an Argument.">Argument</a>* w;
<a name="l00414"></a>00414                 <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* scc = <span class="keyword">new</span> <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>();
<a name="l00415"></a>00415                 <span class="keywordflow">do</span> {
<a name="l00416"></a>00416                         w=stack-&gt;back();
<a name="l00417"></a>00417                         stack-&gt;pop_back();
<a name="l00418"></a>00418                         scc-&gt;<a class="code" href="classSetArguments.html#a989d8986ecf49baa0dc982766c0a5df4" title="Add an argument to the set.">add_Argument</a>(w);
<a name="l00419"></a>00419                 }<span class="keywordflow">while</span> (w!=v);
<a name="l00420"></a>00420                 sccresult-&gt;push_back(scc);
<a name="l00421"></a>00421                 <span class="comment">//delete scc; NON SI PUÒ FARE. cercar di capire se si può distruggere a posteriori</span>
<a name="l00422"></a>00422         }
<a name="l00423"></a>00423 }
<a name="l00424"></a>00424 
<a name="l00429"></a><a class="code" href="classSCCSEQ.html#adb5a0f5c376f3e0485bccd119e33a127">00429</a> vector&lt;SetArguments*&gt;* <a class="code" href="classSCCSEQ.html#adb5a0f5c376f3e0485bccd119e33a127">SCCSEQ::getFathersUnion</a>(vector&lt;SetArguments*&gt;* setSCC, <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* s_i) {
<a name="l00430"></a>00430         vector&lt;SetArguments*&gt;* a_i = <span class="keyword">new</span> vector&lt;SetArguments*&gt;();
<a name="l00431"></a>00431         <span class="comment">//cout &lt;&lt; &quot;started get fathers with s_i &quot; &lt;&lt; *s_i &lt;&lt; &quot; printing setSCC&quot; &lt;&lt; endl;</span>
<a name="l00432"></a>00432         <span class="comment">//for(auto itt=setSCC-&gt;begin(); itt!=setSCC-&gt;end(); itt++)</span>
<a name="l00433"></a>00433         <span class="comment">//      cout &lt;&lt; &quot;S: &quot; &lt;&lt; **itt &lt;&lt; endl;</span>
<a name="l00434"></a>00434         <span class="keywordflow">for</span>(<span class="keyword">auto</span> it_j=setSCC-&gt;begin(); ((**it_j)!=(*s_i) and it_j!=setSCC-&gt;end()); it_j++) {
<a name="l00435"></a>00435                 <a class="code" href="classSetArguments.html" title="Class encompassing a set of arguments.">SetArguments</a>* s_j_attacks_s_i = (*it_j)-&gt;<a class="code" href="classSetArguments.html#a0b7a69e50ba0141effc24c77f72195f8" title="Retrieve the arguments in the caller set which attacks at least one node in the attacked set...">getSubsetAttacks</a>(s_i);
<a name="l00436"></a>00436                 <span class="comment">//cout &lt;&lt; &quot;s_j = &quot; &lt;&lt; **it_j &lt;&lt; endl;</span>
<a name="l00437"></a>00437                 <span class="keywordflow">if</span>(!s_j_attacks_s_i-&gt;<a class="code" href="classSetArguments.html#a91e548daa6d0859946c8604b1ebb8c5a" title="Check wether or not this set is empty.">empty</a>()) {
<a name="l00438"></a>00438                         <span class="comment">//cout &lt;&lt; &quot;aggiungo s_j ad a_i = &quot; &lt;&lt; *a_i &lt;&lt; endl;</span>
<a name="l00439"></a>00439                         a_i-&gt;push_back(*it_j);
<a name="l00440"></a>00440                 }
<a name="l00441"></a>00441         }
<a name="l00442"></a>00442         <span class="comment">//cout &lt;&lt; &quot;ritorno a_i = &quot; &lt;&lt; *a_i &lt;&lt; endl;</span>
<a name="l00443"></a>00443         <span class="keywordflow">return</span> a_i;
<a name="l00444"></a>00444 }
</pre></div></div><!-- contents -->
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="SCCSEQ_8cpp.html">SCCSEQ.cpp</a>      </li>

    <li class="footer">Generated on Fri Jan 17 2014 11:47:51 for SemOpt by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
   </ul>
 </div>


</body>
</html>
